<?php

namespace Code;

class Paginador
{

    private $pagina; // pagina actual
    private $paginas; // cantidad de paginas
    private $paginacion; // cantidad de items por pagina

    public function __construct($paginacion) {
        $this->paginacion = $paginacion;
    }

    public function getPaginaActual() {
        return $this->pagina;
    }

    public function getPaginaAnterior() {
        if ( $this->pagina <= 1 ) {
            return 1;
        } else {
            return $this->getPaginaActual()-1;
        }
    }

    public function getPaginaSiguiente() {
        if ( $this->pagina >= $this->paginas ) {
            return $this->paginas;
        } else {
            return $this->getPaginaActual()+1;
        }
    }

    public function tieneQuePaginar() {
        return ( $this->getPaginaActual() != $this->getPaginaAnterior() )
            || ( $this->getPaginaActual() != $this->getPaginaSiguiente() );
    }

    public function query($query, $pagina=1) {
        $model = Model::getInstance();
        if (is_null($model)) {
            return null;
        }
        $result = $model->query($query);
        $cantidad = $model->numRows($result);
        $this->paginas = (int)($cantidad/$this->paginacion);
        // correccion de la cantidad de paginas
        if ( ($cantidad%$this->paginacion)!=0 ) {
            $this->paginas++;
        }
        // correccion del numero de pagina
        $this->pagina = $pagina;
        if ( $this->pagina<1 ) {
            $this->pagina = 1;
        }
        if ( $this->pagina > $this->paginas ) {
            $this->pagina = $this->paginas;
        }
        return ($query." LIMIT ". ($this->pagina-1)*($this->paginacion) .", ". $this->paginacion);
    }

}

?>
